package com.zhugang.week01;

/**
 * @program algorithms
 * @description: canJump
 * @author: chanzhugang
 * @create: 2022/04/07 08:25
 */
public class CanJump1 {

    public static void main(String[] args) {
        CanJump1 jump1 = new CanJump1();
        int[] nums = new int[]{3, 2, 1, 0, 4};
        boolean flag = jump1.canJump1(nums);
        System.out.println(flag);
    }

    /**
     * 非负整数数组nums，最初位于数组第一个下标，数组中每个元素代表在该位置可以跳跃的最大长度，判断是否能够到达最后一个下标
     * nums = [2,3,1,1,4] true
     * nums = [3,2,1,0,4] false
     */
    public boolean canJump1(int[] nums) {
        /**
         * 取每个下标的最大跳跃位置，看是否>= 数组长度
         */
        int reachedMax = 0;
        for (int i = 0; i < nums.length; i++) {
            if (i > reachedMax) {
                return false;
            }
            if (i + nums[i] > reachedMax) {
                reachedMax = i + nums[i];
            }
            if (reachedMax >= nums.length - 1) {
                return true;
            }
        }
        return false;
    }


}